--- 战斗单位
---
--- @class Fighter
Fighter = ClientFight.CreateClass("Fighter")
local Fighter = Fighter

--- @public
--- @return Fighter
function Fighter:ctor()
    self = AbstractFighter.New()
    self.groupFighterId = 1001;

    -- 英雄配置  G.dataTable["t_hero"]
    self.heroBean = {};

    --- @class FightGroup

    self.fightGroup = {};

    --- @class FightTeam

    self.fightTeam = {};

    -- 站位
    self.position = 0;

    -- 伙伴ID
    self.partnerId = 0;

    -- 是否英雄
    self.leader = false;
    -- 是否为怪物
    self.monster = false;

    --伙伴等级
    self.level = 0;
    --伙伴星级
    self.star = 0;

    -- 当前血量
    self.hp = 0;

    -- 专武等级
    self.weaponLevel = 0;

    -- 行为树
    self.aiTree = nil;
    -- 忽略使用的技能（选择目标为空的技能）
    self.skipSkill = nil;
    -- 准备使用技能
    self.prepareSkill = nil;
    -- 准备阶段目标
    ---@class Fighter
    self.prepareTarget = nil;

    -- 拥有的技能
    ---@class Skill
    --- @type table<number, Skill> 选取的英雄
    self.skills = {};
    -- 拥有的被动技能
    ---@class Skill
    --- @type table<number, Skill> 选取的英雄
    self.passiveskills = {};

    -- 总状态
    --- @type EnumConst.FightActionType
    self.totalState = 0;
    -- CD列表
    ---@class Cooldown
    --- @type table<number, Cooldown> 选取的英雄
    self.cooldowns = {};

    ---@class FightTeam
    self.fight = nil;

    -- 普通攻击
    ---@class Skill
    self.normalAttack = nil;

    --
    -- 战斗数值记录<br/>
    --- @type EnumConst.FightActionType
    self.fighterStats = {};

    --
    ---@class Buff
    --- @type table<number, Buff> 选取的英雄
    self.buffs = {};

    -- 上一次普攻目标
    ---@class Fighter
    self.lastNormalAttackFighter = nil;

    --
    -- 角色死亡状态
    -- 由于现有逻辑全部使用hp来判断死亡, 用这个标识来判断是否执行过死亡逻辑，不然会出现重复死亡的现象

    self.dieStatus = false;

    -- 护盾池
    self.defeatPool = {};

    --是否重置准备阶段目标*/
    self.resetPrepareTarget = {};

    -- 正在使用技能
    ---@class BattleUseSkill
    self.usingSkill = {};

    --
    -- 小组玩家名字

    self.playerName = "";
    --
    -- 小组玩家名字
    self.playerId = 0;


    --重置对象信息

end
function self:isDie()
    return self.hp <= 0;
end

function self:getTeamIndex()
    return self.fightTeam.getTeamIndex();
end

function self:isGroupFighter()
    return self.fighterId >= self.groupFighterId;
end

function self:isSummons()
    return false;
end

function self:equals(o)
    if (self == o) then
        return true;
    end
    if (o == nil) then
        return false;
    end
    local fighter = o;
    return self.fighterId == fighter.fighterId;
end

function self:isRangedCLass()
    if self.heroBean.f_HeroType == HeroConst.Hero_Type_MO_DAO_SHI or self.heroBean.f_HeroType == HeroConst.Hero_Type_MU_SHI or self.heroBean.f_HeroType == HeroConst.Hero_Type_YOU_XIA then
        return true;
    else
        return false;
    end
end
